const qiniuUploader = require("../utils/qiniuUploader");
const Buffer = require('../buffer/index.js');
const CryptoJS = require('../crypto-js/hmac-sha1.js');
const base64 = require('../crypto-js/enc-base64.js');


const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

const base64ToUrlSafe = (v) => {
  return v.replace(/\//g, '_').replace(/\+/g, '-');
}

/**
 * 
 * @param {opt.ak 七牛云 ak  opt.sk 七牛云 sk opt.bkt七牛云的命名空间}} opt 
 */
const getQiniuToken = (opt) => {

  var accessKey = opt.ak;
  var secretkey = opt.sk;
  var bucket = opt.bkt;

  var strdata = {
    "scope": bucket,//空间域名
    "deadline": Date.parse(new Date()) + 360000 //当前时间截
  }
  // console.log(CryptoJS); return false;
  wx.setStorageSync('tokentime', strdata.deadline)
  var str = JSON.stringify(strdata);
  var encoded = Buffer.Buffer.from(str).toString('base64');
  var encodedStr = base64ToUrlSafe(encoded);
  //HmacSHA1加密

  var sign = CryptoJS(encodedStr, secretkey);
  var cod = base64.stringify(sign)
  var encodedSign = base64ToUrlSafe(cod);
  var token = accessKey + ':' + encodedSign + ':' + encodedStr;
  console.log('token', token)
  return token;
}

/**
 *  初始化七牛云相关配置
 * @param {}} token 七牛的加密token
 */
const initQiniu = (token) => {
  var options = {
    // bucket所在区域，这里是华北区。ECN, SCN, NCN, NA, ASG，分别对应七牛云的：华东，华南，华北，北美，新加坡 5 个区域
    region: 'NCN',

    // 获取uptoken方法三选一即可，执行优先级为：uptoken > uptokenURL > uptokenFunc。三选一，剩下两个置空。推荐使用uptokenURL，详情请见 README.md
    // 由其他程序生成七牛云uptoken，然后直接写入uptoken
    uptoken: token,
    // 从指定 url 通过 HTTP GET 获取 uptoken，返回的格式必须是 json 且包含 uptoken 字段，例如： {"uptoken": "0MLvWPnyy..."}
    // uptokenURL: 'https://[yourserver.com]/api/uptoken',
    // uptokenFunc 这个属性的值可以是一个用来生成uptoken的函数，详情请见 README.md
    // uptokenFunc: function () { },

    // bucket 外链域名，下载资源时用到。如果设置，会在 success callback 的 res 参数加上可以直接使用的 fileURL 字段。否则需要自己拼接
    domain: 'http://qiniu.yandaijia.cn',
    // qiniuShouldUseQiniuFileName 如果是 true，则文件的 key 由 qiniu 服务器分配（全局去重）。如果是 false，则文件的 key 使用微信自动生成的 filename。出于初代sdk用户升级后兼容问题的考虑，默认是 false。
    // 微信自动生成的 filename较长，导致fileURL较长。推荐使用{qiniuShouldUseQiniuFileName: true} + "通过fileURL下载文件时，自定义下载名" 的组合方式。
    // 自定义上传key 需要两个条件：1. 此处shouldUseQiniuFileName值为false。 2. 通过修改qiniuUploader.upload方法传入的options参数，可以进行自定义key。（请不要直接在sdk中修改options参数，修改方法请见demo的index.js）
    // 通过fileURL下载文件时，自定义下载名，请参考：七牛云“对象存储 > 产品手册 > 下载资源 > 下载设置 > 自定义资源下载名”（https://developer.qiniu.com/kodo/manual/1659/download-setting）。本sdk在README.md的"常见问题"板块中，有"通过fileURL下载文件时，自定义下载名"使用样例。
    shouldUseQiniuFileName: false
  };
  // 将七牛云相关配置初始化进本sdk
  qiniuUploader.init(options);
}

/**
 * 获取唯一字符串
 */
const getUUid = () => {
  var s = [];
  var hexDigits = "0123456789abcdef";
  for (var i = 0; i < 36; i++) {
    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  }
  s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
  s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  s[8] = s[13] = s[18] = s[23] = "-";

  var uuid = s.join("");
  return uuid;
}

module.exports = {
  formatTime: formatTime,
  getUUid,
  formatNumber,
  base64ToUrlSafe,
  getQiniuToken,
  initQiniu
}

